package spzx.controller;

import com.alibaba.excel.EasyExcel;
import com.atguigu.spzx.model.entity.product.Category;
import com.atguigu.spzx.model.vo.common.Result;
import com.atguigu.spzx.model.vo.common.ResultCodeEnum;
import com.atguigu.spzx.model.vo.product.CategoryExcelVo;
import jakarta.servlet.http.HttpServletResponse;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import spzx.listener.CategoryReadListener;
import spzx.mapper.CategoryMapper;
import spzx.service.CategoryService;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

@RestController
@RequestMapping("/admin/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 查询所有的一级商品分类，每个分类的下级一并查出，赋值到Children属性中，形成树形结构
     * @return
     */
    @GetMapping("findCategoryTree")
    public Result findCategoryTree(){
        List<Category> oneCategoryList = categoryService.findCategoryTree(0L);
        return Result.build(oneCategoryList,ResultCodeEnum.SUCCESS);
    }

    /**
     * 导入商品分类接口，将Excel文件中的数据导入到category表中
     * @param file
     * @return IOException
     */
    @PostMapping("upload")
    public Result upload(MultipartFile file)  {
        //1.获取上传的文件名
        categoryService.upload(file);
        return Result.build(null,ResultCodeEnum.SUCCESS);
    }


    /**
     * 商品分类的导出，将category表中的数据，形成Excel文件下载至客户端
     * @param response
     * @throws IOException
     */
    @GetMapping("download")
    public void download(HttpServletResponse response) throws IOException {
        categoryService.download(response);
    }


    /**
     * 根据pid查询商品分类列表，并且每个分类需要额外定义一个hasChildren属性，用来判断是否有子分类
     * @param parentId
     * @return list
     */
    @GetMapping("findByParentId/{parentId}")
    //使用@PathVariable的情景：当请求路径中包含{xxx}这样的占位符时，我们可以使用@PathVariable注解来获取路径参数的值。
    public Result findByParentId(@PathVariable Long parentId){
        List<Category> list = categoryService.findByParentId(parentId);
        return Result.build(list, ResultCodeEnum.SUCCESS);
    }
}
